import axios from 'axios';

// 创建axios实例 - 使用8002端口
const api = axios.create({
  baseURL: 'http://127.0.0.1:8002/api/', // 使用8002端口
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json',
  },
  withCredentials: false, // 跨域请求不发送cookie
});

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    console.log('发送请求:', config.url, config);
    return config;
  },
  error => {
    // 对请求错误做些什么
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    console.log('请求成功:', response.config.url, response.data);
    return response.data;
  },
  error => {
    // 对响应错误做点什么
    console.error('响应错误:', error.config?.url, error.message, error);
    if (error.response) {
      // 请求已发出，服务器响应状态码不在 2xx 范围内
      console.error('错误状态:', error.response.status, error.response.data);
    } else if (error.request) {
      // 请求已发出，但没有收到响应
      console.error('无响应错误:', error.request);
    }
    return Promise.reject(error);
  }
);

// JSON数据相关接口
export const jsonApi = {
  // 保存JSON数据
  saveJsonData(jsonData) {
    return api.post('json/save/', {
      json_data: jsonData
    });
  },
  
  // 获取JSON数据
  getJsonData() {
    return api.get('json/get/');
  },
  
  // 获取JSON数据列表
  listJsonData() {
    return api.get('json/list/');
  }
};

// Kafka配置相关接口
export const kafkaConfigApi = {
  // 保存Kafka配置
  saveKafkaConfig(config) {
    return api.post('kafka/config/save/', config);
  },
  
  // 获取单个Kafka配置
  getKafkaConfig(id) {
    return api.get(`kafka/config/get/?id=${id}`);
  },
  
  // 获取所有Kafka配置
  listKafkaConfigs() {
    return api.get('kafka/config/list/');
  },
  
  // 删除Kafka配置
  deleteKafkaConfig(id) {
    return api.post('kafka/config/delete/', { id });
  },
  
  /**
   * 获取key映射列表
   * 
   * @returns {Promise} 返回包含映射关系的Promise对象
   */
  getKeyMapList() {
    return api.get('kafka/key-map/list/');
  },
  
  /**
   * 获取字段显示配置列表
   * 
   * @param {number} configId - (可选) 配置ID，如果不提供则返回所有配置
   * @returns {Promise} 返回包含字段显示配置的Promise对象
   */
  getKeyDisplayList(configId) {
    const url = configId ? `kafka/key-display/list/?config_id=${configId}` : 'kafka/key-display/list/';
    return api.get(url);
  }
};

// Kafka相关接口
export const kafkaApi = {
  // 发送Kafka消息
  sendMessage(kafkaUrl, topic, msg) {
    return api.post('kafka/send/', {
      kafkaUrl,
      topic,
      msg
    });
  }
};

export default api;